// 导入 Sequelize 的数据类型模块，用于定义模型字段类型
const { DataTypes } = require("sequelize");
// 导入数据库连接实例（已配置好的 Sequelize 连接）
const sequelize = require("../config/db");

// 定义 Feature 模型（对应 feature 表）
const Feature = sequelize.define(
  "Feature", // Sequelize 内部模型名（大写开头,约定俗成）
  {
    featureId: {
      type: DataTypes.INTEGER, // 整数类型
      primaryKey: true, // 设为主键
      autoIncrement: true, // 自动递增
      allowNull: false, // 非空
      field: "feature_id", // 映射数据库中的字段名(下划线命名)
      comment: "特征记录编号，主键", // 字段注释
    },
    channelId: {
      type: DataTypes.INTEGER,
      allowNull: false,
      field: "channel_id",
      comment: "关联的通道 ID",
    },
    targetId: {
      type: DataTypes.INTEGER,
      allowNull: false,
      field: "target_id",
      comment: "关联的指标 ID",
    },
    collectedTime: {
      type: DataTypes.DATE, // 日期时间类型
      allowNull: false,
      field: "collected_time",
      comment: "采集时间",
    },
    value: {
      type: DataTypes.DECIMAL(10, 2), // 十进制数值类型，最多 10 位，其中小数点后 2 位
      allowNull: false,
      comment: "指标采集值",
    },
    healthStatus: {
      type: DataTypes.TINYINT, // tinyint 类型（1字节整数，范围-128~127）
      allowNull: false,
      field: "health_status",
      comment: "指标健康状态（0：正常，1：一级报警，2：二级报警，3：三级报警）",
    },
  },
  {
    tableName: "feature", // 显式指定数据库表名（小写,与表名一致）
    freezeTableName: true, // 禁止 Sequelize 自动将表名复数化
    timestamps: false, // 不自动生成 createdAt 和 updatedAt 字段
    comment: "特征表",
    // 定义表索引(优化查询性能)
    indexes: [
      {
        fields: ["collected_time"],
        name: "idx_feature_collected_time",
        // 用途：优化按时间范围查询历史数据的场景（高频查询场景）
      },
      {
        fields: ["target_id"],
        name: "idx_feature_target_id",
        // 用途：优化按指标ID查询数据的场景
      },
      {
        fields: ["channel_id"],
        name: "fk_feature_channel_id",
        // 用途：优化关联查询通道信息的场景
      },
    ],
  }
);

// 导出模型供其他模块使用
module.exports = Feature;
